<?php

define('MAX', 30);
require_once('mysql_table.php');

class articulo extends mysql_table {

  /**
   * Constructor
   */
  function __construct() {
    parent::__construct();
    $this->TableName = "ARTICULOS";
    $this->IDField = "ID";

    $this->fields['ID'] = "";
    $this->fields['ID_FAMILIA'] = "";
    $this->fields['ID_MARCA'] = "";
    $this->fields['ID_PROVEEDOR'] = "";
    $this->fields['NOMBRE'] = "";
    $this->fields['CODIGO'] = "";
    $this->fields['DESCRIPCION'] = "";

    $this->fields['PRECIO_COSTO'] = "";
    $this->fields['PRECIO_LISTA'] = "";
    $this->fields['PRECIO_PUBLICO'] = "";
    $this->fields['DESCUENTO'] = "";

    $this->fields['CANTIDAD_STOCK'] = "";
    $this->fields['CANTIDAD_DISPONIBLE'] = "";
    $this->fields['ID_TIPO_STOCK'] = "";
    $this->fields['DESTACADO'] = "";

    $this->fields['OFERTA'] = "";
    $this->fields['PROMOCION'] = "";
    $this->fields['ID_STATUS'] = "";
  }

  /**
   * Busca todos los activos
   * @return type 
   */
  function buscar_activos() {

    $query = "SELECT * FROM ARTICULOS WHERE ID_STATUS != 0";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   * los articulos activos para listarlos
   * @return type 
   */
  function buscar() {
    $query = "SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA,
                    PROVEEDORES.NOMBRE AS NOMBRE_P, STATUS.DESCRIPCION AS STATUS, 
                    PROVEEDORES.APELLIDO AS APELLIDO_P FROM
                    ARTICULOS, MARCAS, PROVEEDORES, STATUS 
                    WHERE ARTICULOS.ID_STATUS !=0 
                    AND STATUS.ID = ARTICULOS.ID_STATUS 
                    AND ARTICULOS.ID_MARCA = MARCAS.ID 
                    AND ARTICULOS.ID_PROVEEDOR = PROVEEDORES.ID ORDER BY ARTICULOS.ID DESC";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   * Busca el campo de busqueda
   * @param type $palabra
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_busqueda($palabra, $desde=0, $cuantos=MAX) {

    $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE (ARTICULOS.NOMBRE LIKE('%" . $palabra . "%') OR ARTICULOS.DESCRIPCION LIKE('%" . $palabra . "%')) AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1) 
              GROUP BY ID_FAMILIA)";
    $query .= " UNION ALL ";
    $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE (ARTICULOS.NOMBRE LIKE('%" . $palabra . "%') OR ARTICULOS.DESCRIPCION LIKE('%" . $palabra . "%')) AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1)) ";

    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;


    $salida = $this->tovector_assoc_query($query);
//    print_r_html($query,0);
    return $salida;
  }

  /**
   * Busca destacados
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_destacados($desde=0, $cuantos=MAX) {

    $query = "SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.DESTACADO=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA ";

    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;


    $salida = $this->tovector_assoc_query($query);
//    print_r_html($query,0);
    return $salida;
  }
  
  /**
   * Busca articulos en oferta
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_ofertas($desde=0, $cuantos=MAX) {

    $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.OFERTA=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1) 
              GROUP BY ID_FAMILIA)";
    $query .= " UNION ALL ";
    $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.OFERTA=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1)) ";

    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;


    $salida = $this->tovector_assoc_query($query);
//    print_r_html($query,0);
    return $salida;
  }
  
  /**
   * Busca articulos en promocion
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_promocion($desde=0, $cuantos=MAX) {

   $query = "SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.PROMOCION=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA ";

    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;


    $salida = $this->tovector_assoc_query($query);
//    print_r_html($query,0);
    return $salida;
  }
  
  /**
   * Busca por Marca - CASO 0 en el listado de articulos
   * @param type $id_marca
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_marca($id_marca, $desde=0, $cuantos=MAX) {

    if ($id_marca == 'all') {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE 
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1) 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE 
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1)) ";
    } else {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1) 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1)) ";
    }
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;


    $salida = $this->tovector_assoc_query($query);
//   print($query);
    return $salida;
  }

  /**
   * Busca por Producto - CASO 1 en el listado de articulos
   * @param type $id_producto
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function listar_articulos($id_producto, $desde=0, $cuantos=MAX) {
    $arr_articulos = $this->buscar_producto($id_producto);
    $articulos = implode(',', $arr_articulos);

    if (empty($articulos)) {
      return null;
    }

    $query = "(SELECT ARTICULOS.* FROM
                    ARTICULOS 
                    WHERE ID_FAMILIA != -1 AND ID IN (" . $articulos . ")
                    GROUP BY ID_FAMILIA)";
    $query .= " UNION ALL ";
    $query .= "(SELECT ARTICULOS.* FROM
                    ARTICULOS 
                    WHERE ID_FAMILIA = -1 AND ID IN (" . $articulos . "))";
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
//    print($query);
    return $salida;
  }

  /**
   * Busca por Marca y Producto - CASO 2 en el listado de articulos
   * @param type $id_marca
   * @param type $id_producto
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_marca_producto($id_marca, $id_producto, $desde=0, $cuantos=MAX) {

    if ($id_marca == 'all') {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE 
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1 AND ID_PRODUCTO=" . $id_producto . ") 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE 
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1 AND ID_PRODUCTO=" . $id_producto . ")) ";
    } else {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1 AND ID_PRODUCTO=" . $id_producto . ") 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_PRODUCTOS WHERE ARTICULOS.ID_STATUS = 1 AND ID_PRODUCTO=" . $id_producto . ")) ";
    }

    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
    return $salida;
  }

  /**
   * Busca por Marca, producto y categoria - CASO 3 en el listado de articulos
   * @param type $id_marca
   * @param type $id_categoria
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_marca_categoria($id_marca, $id_categoria, $desde=0, $cuantos=MAX) {

    if ($id_marca == 'all') {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND 
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_CATEGORIAS WHERE ID_CATEGORIA=" . $id_categoria . ")
                GROUP BY ID_FAMILIA) ";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND 
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_CATEGORIAS WHERE ID_CATEGORIA=" . $id_categoria . ")) ";
    } else {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_CATEGORIAS WHERE ID_CATEGORIA=" . $id_categoria . ")
                GROUP BY ID_FAMILIA) ";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_CATEGORIAS WHERE ID_CATEGORIA=" . $id_categoria . ")) ";
    }
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
    return $salida;
  }

  /**
   * Busca por Marca, Producto, Categoria y SubCategoria - CASO 4 en el listado de articulos
   * @param type $id_marca
   * @param type $id_subcategoria
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_marca_subcategoria($id_marca, $id_subcategoria, $desde=0, $cuantos=MAX) {

    if ($id_marca == 'all') {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBCATEGORIA WHERE ID_SUBCATEGORIA=" . $id_subcategoria . ") 
               GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBCATEGORIA WHERE ID_SUBCATEGORIA=" . $id_subcategoria . ")) ";
    } else {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBCATEGORIA WHERE ID_SUBCATEGORIA=" . $id_subcategoria . ") 
               GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBCATEGORIA WHERE ID_SUBCATEGORIA=" . $id_subcategoria . ")) ";
    }
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
    return $salida;
  }

  /**
   * Busca por Marca, Pro, Cat, Sub y Division 1 - CASO 5 en el listado de articulos
   * @param type $id_marca
   * @param type $id_division1
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_marca_division1($id_marca, $id_division1, $desde=0, $cuantos=MAX) {

    if ($id_marca == 'all') {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL1 WHERE ID_SUBNIVEL1=" . $id_division1 . ") 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL1 WHERE ID_SUBNIVEL1=" . $id_division1 . ")) ";
    } else {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL1 WHERE ID_SUBNIVEL1=" . $id_division1 . ") 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL1 WHERE ID_SUBNIVEL1=" . $id_division1 . ")) ";
    }
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
//    print($query);
    return $salida;
  }

  /**
   * Busca por Marca, Pro, Cat, Sub, Division 1 y Division 2 - CASO 6 en el listado de articulos
   * @param type $id_marca
   * @param type $id_division2
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_marca_division2($id_marca, $id_division2, $desde=0, $cuantos=MAX) {

    if ($id_marca == 'all') {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL2 WHERE ID_SUBNIVEL2=" . $id_division2 . ") 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL2 WHERE ID_SUBNIVEL2=" . $id_division2 . ")) ";
    } else {
      $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL2 WHERE ID_SUBNIVEL2=" . $id_division2 . ") 
              GROUP BY ID_FAMILIA)";
      $query .= " UNION ALL ";
      $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND MARCAS.ID=" . $id_marca . " AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_SUBNIVEL2 WHERE ID_SUBNIVEL2=" . $id_division2 . ")) ";
    }
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
//    print($query);
    return $salida;
  }

  /**
   * Busca solo por categoría -  CASO 7 en el listado
   * @param type $id_categoria
   * @param type $desde
   * @param type $cuantos
   * @return type 
   */
  function buscar_solo_categoria($id_categoria, $desde=0, $cuantos=MAX) {

    $query = "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA != -1 AND 
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_CATEGORIAS WHERE ID_CATEGORIA=" . $id_categoria . ")
                GROUP BY ID_FAMILIA) ";
    $query .= " UNION ALL ";
    $query .= "(SELECT ARTICULOS.*, MARCAS.DESCRIPCION AS MARCA 
              FROM ARTICULOS, MARCAS
              WHERE ARTICULOS.ID_STATUS=1 AND
              MARCAS.ID = ARTICULOS.ID_MARCA AND ID_FAMILIA = -1 AND
              ARTICULOS.ID IN (SELECT ID_ARTICULO FROM ARTICULOS_CATEGORIAS WHERE ID_CATEGORIA=" . $id_categoria . ")) ";
    
    if ($cuantos)
      $query .= "ORDER BY ID_FAMILIA ASC, NOMBRE ASC LIMIT " . $desde . "," . $cuantos;

    $salida = $this->tovector_assoc_query($query);
//    print($query);
    return $salida;
  }

  /**
   * todos los articulos activos por proveedor para listarlos
   * @param type $id_proveedor
   * @return type 
   */
  function buscar_proveedor($id_proveedor) {

    $query = "SELECT ARTICULOS.*, PRECIOS.PRECIO_LISTA,
                    PRECIOS.PRECIO_PUBLICO, PRECIOS.DESCUENTO, MARCAS.DESCRIPCION AS MARCA,
                    CATEGORIAS.DESCRIPCION AS CATEGORIA,
                    PRODUCTOS.DESCRIPCION AS PRODUCTO,
                    PROVEEDORES.NOMBRE AS NOMBRE_P, STATUS.DESCRIPCION AS STATUS, 
                    PROVEEDORES.APELLIDO AS APELLIDO_P FROM
                    ARTICULOS, MARCAS, CATEGORIAS, PRODUCTOS, PROVEEDORES, STATUS, PRECIOS  
                    WHERE ARTICULOS.ID_STATUS !=0 
                    AND PRECIOS.ID_ARTICULO = ARTICULOS.ID
                    AND PRECIOS.ID_STATUS = 1
                    AND ARTICULOS.ID_PROVEEDOR = " . $id_proveedor . " 
                    AND STATUS.ID = ARTICULOS.ID_STATUS 
                    AND ARTICULOS.ID_MARCA = MARCAS.ID 
                    AND ARTICULOS.ID_CATEGORIA = CATEGORIAS.ID
                    AND ARTICULOS.ID_PRODUCTO = PRODUCTOS.ID
                    AND ARTICULOS.ID_PROVEEDOR = PROVEEDORES.ID ORDER BY ARTICULOS.ID ASC";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   * todos los articulos activos por proveedor para listarlos
   * @param type $id_proveedor
   * @return type 
   */
  function lista_proveedor($id_proveedor) {

    $query = "SELECT * FROM ARTICULOS WHERE ID_STATUS !=0 AND ID_PROVEEDOR=" . $id_proveedor;
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   * Retorna un solo articulo, surge porque se querian datos de varias tablas, ahora no para mostrarlo al cliente
   * @param type $id_articulo
   * @return type 
   */
  function search_todo($id_articulo) {

    $query = "SELECT ARTICULOS.* FROM ARTICULOS 
					WHERE ARTICULOS.ID_STATUS = 1 AND ARTICULOS.ID=" . $id_articulo;
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   * Retorna los unicos en funcion de un campo/valor
   * @param type $Column
   * @param type $Value
   * @param type $id_marca
   * @return type 
   */
  function unique($Column, $Value, $id_marca) {
    $query = "SELECT * FROM " . $this->TableName . " WHERE " . $Column . "=" . $Value . " AND ID_MARCA=" . $id_marca . " AND ID_STATUS !=0";
    $result = $this->runquery($query);
    //print_r($query);
    if ($this->SQLObject->num_rows($result) == 0) {
      return false;
    } else {
      $this->getdata($result);
      return true;
    }
  }

  /**
   * Busca que solo pueda haber un articulo con nombre y serial unico.. esto fue a pedida del cliente
   * @param type $nombre
   * @param type $codigo
   * @param type $id_marca
   * @return type 
   */
  function articulo_unique($nombre, $codigo, $id_marca) {

    $query = "SELECT * FROM " . $this->TableName . " WHERE  NOMBRE = '" . $nombre . "' AND CODIGO = '" . $codigo . "' AND ID_MARCA=" . $id_marca . " AND ID_STATUS !=0";
    $result = $this->runquery($query);

    if ($this->SQLObject->num_rows($result) == 0) {
      return false;
    } else {
      $this->getdata($result);
      return true;
    }
  }

  /**
   *
   * @param type $id_producto
   * @return type 
   */
  function ids_producto($id_producto) {

    $query = "SELECT ARTICULOS.ID FROM
                    ARTICULOS, ARTICULOS_PRODUCTOS, PRODUCTOS 
                    WHERE ARTICULOS.ID_STATUS = 1 
                    AND PRODUCTOS.ID_STATUS = 1 
                    AND PRODUCTOS.ID = " . $id_producto . " 
                    AND ARTICULOS.ID = ARTICULOS_PRODUCTOS.ID_ARTICULO 
                    AND PRODUCTOS.ID = ARTICULOS_PRODUCTOS.ID_PRODUCTO 
                    ORDER BY ARTICULOS.ID ASC";
    $salida = $this->tovector_assoc_query($query);
//    print($query);
    return $salida;
  }

  /**
   *
   * @param type $id_producto
   * @return type 
   */
  function ids_cat($id_producto) {

    $query = "SELECT ARTICULOS.ID FROM
                    ARTICULOS, ARTICULOS_CATEGORIAS, CATEGORIAS 
                    WHERE ARTICULOS.ID_STATUS = 1 
                    AND CATEGORIAS.ID_STATUS = 1 
                    AND CATEGORIAS.ID_PRODUCTO = " . $id_producto . " 
                    AND ARTICULOS.ID = ARTICULOS_CATEGORIAS.ID_ARTICULO 
                    AND CATEGORIAS.ID = ARTICULOS_CATEGORIAS.ID_CATEGORIA
                    ORDER BY ARTICULOS.ID ASC";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   *
   * @param type $id_producto
   * @return type 
   */
  function ids_subcat($id_producto) {

    $query = "SELECT ARTICULOS.ID FROM
                    ARTICULOS, ARTICULOS_SUBCATEGORIA, SUBCATEGORIA 
                    WHERE ARTICULOS.ID_STATUS = 1 
                    AND SUBCATEGORIA.ID_STATUS = 1 
                    AND SUBCATEGORIA.ID_PRODUCTO = " . $id_producto . " 
                    AND ARTICULOS.ID = ARTICULOS_SUBCATEGORIA.ID_ARTICULO 
                    AND SUBCATEGORIA.ID = ARTICULOS_SUBCATEGORIA.ID_SUBCATEGORIA
                    ORDER BY ARTICULOS.ID ASC";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   *
   * @param type $id_producto
   * @return type 
   */
  function ids_sub1($id_producto) {

    $query = "SELECT ARTICULOS.ID FROM
                    ARTICULOS, ARTICULOS_SUBNIVEL1, SUBNIVEL1 
                    WHERE ARTICULOS.ID_STATUS = 1 
                    AND SUBNIVEL1.ID_STATUS = 1 
                    AND SUBNIVEL1.ID_PRODUCTO = " . $id_producto . " 
                    AND ARTICULOS.ID = ARTICULOS_SUBNIVEL1.ID_ARTICULO 
                    AND SUBNIVEL1.ID = ARTICULOS_SUBNIVEL1.ID_SUBNIVEL1
                    ORDER BY ARTICULOS.ID ASC";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   *
   * @param type $id_producto
   * @return type 
   */
  function ids_sub2($id_producto) {

    $query = "SELECT ARTICULOS.ID FROM
                    ARTICULOS, ARTICULOS_SUBNIVEL2, SUBNIVEL2 
                    WHERE ARTICULOS.ID_STATUS = 1 
                    AND SUBNIVEL2.ID_STATUS = 1 
                    AND SUBNIVEL2.ID_PRODUCTO = " . $id_producto . " 
                    AND ARTICULOS.ID = ARTICULOS_SUBNIVEL2.ID_ARTICULO 
                    AND SUBNIVEL2.ID = ARTICULOS_SUBNIVEL2.ID_SUBNIVEL2
                    ORDER BY ARTICULOS.ID ASC";
    $salida = $this->tovector_assoc_query($query);
    //print($query);
    return $salida;
  }

  /**
   *
   * @param type $id_producto
   * @return type 
   */
  function buscar_producto($id_producto) {
    $ids_productos = array();

    //PRODUCTO
    $arr1 = $this->ids_producto($id_producto);
    if (count($arr1['ID']))
      $ids_productos = $arr1;

    //CATEGORIA
    $arr2 = $this->ids_cat($id_producto);
    if (count($arr2['ID']))
      $ids_productos = array_merge_recursive($ids_productos, $arr2);

    //SUB CATEGORIA
    $arr3 = $this->ids_subcat($id_producto);
    if (count($arr3['ID']))
      $ids_productos = array_merge_recursive($ids_productos, $arr3);

    //DIVISION 1
    $arr4 = $this->ids_sub1($id_producto);
    if (count($arr4['ID']))
      $ids_productos = array_merge_recursive($ids_productos, $arr4);

    //DIVISION 2
    $arr5 = $this->ids_sub2($id_producto);
    if (count($arr5['ID']))
      $ids_productos = array_merge_recursive($ids_productos, $arr5);

    if (!empty($ids_productos) && count($ids_productos['ID']))
      $ids_productos = array_values(array_unique($ids_productos['ID']));

    return $ids_productos;
  }

  /**
   * Busca los familiares y los ordena ASCENDENTE (0) o DESCENDENTE (1)
   * @param type $id_familia
   * @param type $orden
   * @return type 
   */
  function busca_familiares($id_familia,$orden=0) {
    if($orden){
      $ordenamiento = "DESC";
    }else{
      $ordenamiento = "ASC";
    }
    $query = "SELECT ARTICULOS.* FROM ARTICULOS 
		WHERE ARTICULOS.ID_STATUS = 1 AND ID_FAMILIA =" . $id_familia." ORDER BY PRECIO_PUBLICO ".$ordenamiento;
    $salida = $this->tovector_assoc_query($query);
// print($query);
    return $salida;
  }

}

?>
